// JSON
// JSON是JavaScript Object Notation的缩写，它是一种数据交换格式。

// 序列化
// 让我们先把小明这个对象序列化成JSON格式的字符串：

var dd = {
    name: '熊大',
    age: 8,
    height: 1.65,
    grade: '一年级',
   course: ['JavaScript', 'Java', 'c语言', 'c#']
};
var s = JSON.stringify(dd);
console.log(s);

// 要输出得好看一些，可以加上参数，按缩进输出：
var a = JSON.stringify(dd,null,'    ');
console.log(a);

var aa = JSON.stringify(dd,['name','course'],'   ');
console.log(aa);

//面向对象编程
// 类：类是对象的类型模板，例如，定义Student类来表示学生，类本身是一种类型，Student表示学生类型，但不表示任何具体的某个学生；

// 实例：实例是根据类创建的对象，例如，根据Student类可以创建出xiaoming、xiaohong、xiaojun等多个实例，每个实例表示一个具体的学生，他们全都属于Student类型。

// 所以，类和实例是大多数面向对象编程语言的基本概念
var Student = {
    name: 'bbk',
    height: 1.6,
    tell: function () {
        console.log(this.name + ' is 帅哥');
    }
};

console.log(Student);


var abc = {
    name: '小明'
};

abc.__proto__ = Student;

console.log(abc);

//构造函数
//除了直接用{ ... }创建一个对象外，JavaScript还可以用一种构造函数的方法来创建对象。它的用法是，先定义一个构造函数：
function stu(name) {
    this.name = name;
    this.hello = function () {
        alert('Hello, ' + this.name + '欢迎你的到来...');
    }
}
var f=new stu('迪迦奥特曼');
 f.hello(); 

//在JavaScript中，可以用关键字new来调用这个函数，并返回一个对象：

var xiaoming = new stu('路飞');
xiaoming.name; // '路飞'
xiaoming.hello(); // Hello, 路飞!